/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ceura.ia.practica.android.ui;

import ceura.ia.practica.android.brush.BackgroundType;
import android.content.Context;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import ceura.ia.practica.properties.Propiedades;

/**
 * Esta vista representa una posición (x,y) del mapa/array del laberinto a
 * resolver.
 *
 * @author Sergio Jorge
 */
public class Celda extends LinearLayout {

    boolean agua;
    private final Propiedades properties;
    private final int position;
    private boolean inicio;
    private boolean fin;
    private BackgroundType backgroundType;

    /**
     *
     * @param context Contexto de Android.
     * @param position Posición que ocupa esta celda en el laberinto.
     */
    public Celda(Context context, int position) {
        super(context);
        this.agua = false;
        this.position = position;
        properties = Propiedades.getInstance();
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(properties.getWidthCelda(), properties.getHeightCelda());
        setLayoutParams(params);
        backgroundType = BackgroundType.GRASS;
        setBackgroundResource(backgroundType.resourceId);
    }

    /**
     *
     * @param type Tipo de background que tiene esta celda.
     */
    public void setBackGroundType(BackgroundType type) {
        if (this.backgroundType == BackgroundType.START || this.backgroundType == BackgroundType.END) {
            if (type == BackgroundType.WATER || type == BackgroundType.CAMINO) {
                return;
            }
        }
        this.backgroundType = type;
        setBackgroundResource(type.resourceId);
        this.invalidate();
    }

    /**
     * Compara si dos celdas ocupan la misma posición (x,y).
     *
     * @param celda Celda a comparar.
     * @return Si estan en la misma posición o no.
     */
    public boolean compare(Celda celda) {
        if (celda == null) {
            return false;
        }
        return celda.getPosition() == this.position;
    }

    /**
     *
     * @return La posición de esta celda.
     */
    public int getPosition() {
        return position;
    }

    /**
     *
     * @return El backfgroundType.
     */
    public BackgroundType getBackgroundType() {
        return backgroundType;
    }

    /**
     * Resetea la celda al valor de background predeterminado ( GRASS ) es decir
     * valor 0 en el mapa de valores del laberinto.
     */
    public void reset() {
        this.backgroundType = BackgroundType.GRASS;
        setBackgroundResource(backgroundType.resourceId);
        this.invalidate();
    }
}
